import mockHttp from './mockHttp.js'
import http from './http.js'
import config from './config.js'

// 判断是否使用模拟数据
const useMock = config.PARAM.USE_MOCK;

/**
 * API接口封装
 * 在开发环境或配置了USE_MOCK时使用模拟数据，生产环境使用真实接口
 */
const api = {
  /**
   * 分类管理相关接口
   */
  categories: {
    /**
     * 获取所有分类列表
     * @returns {Promise} Promise对象
     */
    getAll() {
      if (useMock) {
        return mockHttp.get('categories')
      }
      // 实际接口调用，项目上线时替换
      return http.get('api/categories')
    },

    /**
     * 保存所有分类（批量更新）
     * @param {Array} categories 分类数据数组
     * @returns {Promise} Promise对象
     */
    saveAll(categories) {
      if (useMock) {
        return mockHttp.post('categories', categories)
      }
      // 实际接口调用，项目上线时替换
      return http.post('api/categories/batch', categories)
    },

    /**
     * 添加新分类
     * @param {Object} category 分类数据
     * @returns {Promise} Promise对象
     */
    add(category) {
      if (useMock) {
        return mockHttp.post('categories/add', category)
      }
      // 实际接口调用，项目上线时替换
      // return http.post('api/categories', category)
    },

    /**
     * 更新分类
     * @param {Object} category 分类数据
     * @returns {Promise} Promise对象
     */
    update(category) {
      if (useMock) {
        return mockHttp.put(`categories/update`, category)
      }
      // 实际接口调用，项目上线时替换
      // return http.put(`api/categories/${category.id}`, category)
    },

    /**
     * 删除分类
     * @param {String} id 分类ID
     * @returns {Promise} Promise对象
     */
    delete(id) {
      if (useMock) {
        return mockHttp.delete(`categories`, { id })
      }
      // 实际接口调用，项目上线时替换
      // return http.delete(`api/categories/${id}`)
    }
  },

  /**
   * 任务相关接口
   */
  tasks: {
    /**
     * 获取任务列表
     * @param {Object} params 查询参数
     * @returns {Promise} Promise对象
     */
    getList(params = {}) {
      if (useMock) {
        return mockHttp.get('tasks', params)
      }
      // 实际接口调用，项目上线时替换
      // return http.get('api/tasks', params)
    },

    /**
     * 获取任务详情
     * @param {String} id 任务ID
     * @returns {Promise} Promise对象
     */
    getDetail(id) {
      if (useMock) {
        return mockHttp.get('tasks', { id })
      }
      // 实际接口调用，项目上线时替换
      // return http.get(`api/tasks/${id}`)
    },

    /**
     * 创建新任务
     * @param {Object} task 任务数据
     * @returns {Promise} Promise对象
     */
    create(task) {
      if (useMock) {
        return mockHttp.post('tasks/create', task)
      }
      // 实际接口调用，项目上线时替换
      // return http.post('api/tasks', task)
    },

    /**
     * 更新任务
     * @param {Object} task 任务数据
     * @returns {Promise} Promise对象
     */
    update(task) {
      if (useMock) {
        return mockHttp.put(`tasks/update`, task)
      }
      // 实际接口调用，项目上线时替换
      // return http.put(`api/tasks/${task.id}`, task)
    },

    /**
     * 删除任务
     * @param {String} id 任务ID
     * @returns {Promise} Promise对象
     */
    delete(id) {
      if (useMock) {
        return mockHttp.delete(`tasks`, { id })
      }
      // 实际接口调用，项目上线时替换
      // return http.delete(`api/tasks/${id}`)
    },

    /**
     * 批量删除任务
     * @param {Array} ids 任务ID数组
     * @returns {Promise} Promise对象
     */
    batchDelete(ids) {
      if (useMock) {
        return mockHttp.delete(`tasks`, { ids })
      }
      // 实际接口调用，项目上线时替换
      // return http.post('api/tasks/batch-delete', { ids })
    },

    /**
     * 更新任务状态
     * @param {String} id 任务ID
     * @param {String} status 任务状态
     * @returns {Promise} Promise对象
     */
    updateStatus(id, status) {
      if (useMock) {
        return mockHttp.put(`tasks/update`, { id, status })
      }
      // 实际接口调用，项目上线时替换
      // return http.put(`api/tasks/${id}/status`, { status })
    }
  },
  http: useMock ? mockHttp : http,

  // 可以根据需要添加更多的API接口模块

  /**
   * 初始化基础数据
   * 用于首次使用应用时，预设一些默认数据
   */
  initBaseData() {
    if (useMock) {
      // 初始化默认分类数据
      const defaultCategories = [
        { id: 'all', text: '全部任务', fixed: true, icon: 'icon_all' },
        { id: 'study', text: '学习计划', protected: true, icon: 'e10' },
        { id: 'work', text: '工作任务', protected: true, icon: 'e11' },
        { id: 'memo', text: '备忘录', protected: true, icon: 'e12' }
      ]

      // 示例任务数据
      const sampleTasks = [
        {
          id: 'task_1',
          title: '完成项目报告',
          description: '完成第一季度项目进度报告',
          categoryId: 'category_work',
          status: 'pending',
          priority: 'high',
          dueDate: new Date(Date.now() + 86400000).toISOString(), // 明天
          createTime: new Date().toISOString()
        },
        {
          id: 'task_2',
          title: '购买生日礼物',
          description: '为朋友选购生日礼物',
          categoryId: 'category_life',
          status: 'pending',
          priority: 'medium',
          dueDate: new Date(Date.now() + 172800000).toISOString(), // 后天
          createTime: new Date().toISOString()
        },
        {
          id: 'task_3',
          title: '学习Vue.js课程',
          description: '完成Vue.js进阶课程第三章',
          categoryId: 'category_study',
          status: 'pending',
          priority: 'low',
          dueDate: new Date(Date.now() + 259200000).toISOString(), // 三天后
          createTime: new Date().toISOString()
        }
      ]

      // 初始化模拟数据
      mockHttp.initMockData({
        'categories': defaultCategories,
        'tasks': sampleTasks
      })

      return Promise.resolve({
        code: 200,
        message: '初始化数据成功'
      })
    }

    // 实际接口调用，项目上线时替换
    // return http.post('api/init')
  }
}

export default api
